const { DataTypes, Sequelize } = require('sequelize');
const moment = require('moment'); // 引入 moment 库

const sequelize = require('@/db/seq'); // 引入 sequelize 实例

// 定义用户模型
const User = sequelize.define('blog_user', {
  // id: {
  //   type: DataTypes.INTEGER,
  //   primaryKey: true,
  //   autoIncrement: true,
  // },
  //  id会自动生成
  username: {
    type: DataTypes.STRING, // VARCHAR(255)
    allowNull: false,
    unique: true,
    comment: '账号，唯一', // 添加字段描述
  },
  password: {
    type: DataTypes.CHAR(64),
    allowNull: false,
    comment: '密码',
  },
  // role_id: {
  //   type: DataTypes.INTEGER,
  //   references: {
  //     model: Roles,
  //     key: 'id',
  //   },
  //   allowNull: false,
  //   defaultValue: 2,
  //   comment: '角色id',
  // },
  nickname: {
    type: DataTypes.STRING, // VARCHAR(255)
    comment: '昵称',
  },
  email: {
    type: DataTypes.STRING, // VARCHAR(255)
    comment: '邮箱',
  },
  avatar: {
    type: DataTypes.STRING, // VARCHAR(255)
    defaultValue: '/local/avatar/1.png',
    comment: '头像',
  },
  qq: {
    type: DataTypes.STRING, // VARCHAR(255)
    comment: 'QQ',
  },
  ip: {
    type: DataTypes.STRING, // VARCHAR(255)
    comment: 'ip',
  },
  last_login_time: {
    type: DataTypes.DATE, // DATETIME
    defaultValue: Sequelize.NOW, // 默认值为当前时间
    comment: '最后登录时间',
  },
  last_login_ip: {
    type: DataTypes.STRING, // VARCHAR(255)
    comment: '最后登录ip',
  },
  createdAt: {
    type: DataTypes.DATE, // DATETIME
    defaultValue: Sequelize.NOW, // 默认值为当前时间
    get() { // 自定义 getter 方法
      // 获取当前实例的 createdAt 字段值
      const createdAt = this.getDataValue('createdAt');
      return moment(createdAt).format('YYYY-MM-DD HH:mm:ss'); // 格式化时间
    },
    comment: '创建时间',
  },
  updatedAt: {
    type: DataTypes.DATE, // DATETIME
    defaultValue: Sequelize.NOW, // 默认值为当前时间
    comment: '更新时间',
    get() { // 自定义 getter 方法
      // 获取当前实例的 updatedAt 字段值
      const updatedAt = this.getDataValue('updatedAt');
      return moment(updatedAt).format('YYYY-MM-DD HH:mm:ss'); // 格式化时间
    },
  },
},
  {
    freezeTableName: true, // 禁用表名复数
  }
)
// 导出模型
User.associate = (models) => {
  User.belongsToMany(models.blog_roles, {
    through: models.user_roles,
    foreignKey: 'user_id',
    otherKey: 'role_id',
    as: 'roles'
  });
  User.hasMany(models.moment, {
    foreignKey: 'user_id',
    as: 'moments'
  });
  User.hasMany(models.moment_comment, {
    foreignKey: 'user_id',
    as: 'userComments'
  });
  User.hasMany(models.moment_like, {
    foreignKey: 'user_id',
    as: 'userLikes'
  });
  User.hasMany(models.links, {
    foreignKey: 'user_id',
    as: 'links'
  });
};
// 同步数据库
// 需要在数据库中创建表时使用
// User.sync({
//   alter: true, // 是否自动更新表结构，true: 自动更新，false: 不自动更新
// })
module.exports = User;